Coding Tips V1.2.1:
1. In order to use new feature, firmware update in required.
The path of TCM's firmware is under firmware/IR V1.21 210120.bin.

2. SoftResetTCM() can be used if sensor is malfunctional.

3. A whole machine power off/on is required after firmware update, please do not use SoftResetTCM() instead.


Coding Tips V1.1.0:
1. What's new in firmware of TCM V1.1? Do I need to update firmware?

The firmware of TCM V1.1 includes calibartion data saving (offsetX and offsetY).

If you are working well and do the calibration by your own, you don't have to update the firmware.
If you want to save/load the calibration data between AIOs, you can consider upgrading the firmware.

* Please notice: In SDK 1.0.1 and before, the cabibration data is saved on values of application. 
Therefore, if you re-install application or move IR Kit to another AIO will lead to an extra calibration.


2. How to update firmware if I have an older Kit?
The IR Kit in DVT stage or later supports firmware upgrade.
The path of TCM's firmware is under firmware/IR V1.1b.bin.

Reference code (see in testwidget.cpp):

    QFileDialog *fileDialog = new QFileDialog(this);
    fileDialog->setWindowTitle(tr("Open File"));
    fileDialog->setDirectory(".");
    fileDialog->setNameFilter(tr("Firmware Files(*.bin)"));
    if(fileDialog->exec() == QDialog::Accepted) {
        QString path = fileDialog->selectedFiles()[0];
        if (path.isEmpty() == false) {
            QFile file (path);
            bool isOk = file.open(QIODevice::ReadOnly);
            if (isOk)
            {
                QByteArray array = file.readAll();
                int length = array.size();
                char* firm = array.data();
                SetFirmwareData((const unsigned char*)firm, length);
                file.close();

                StartUpdate();
            }
        }
    }

Callback:
    SetUpdateCallback(onUpdate);
			
    void TestWidget::onUpdateCallback(bool isSuc, int prog) {
        if (isSuc) {
            emit updateLabel(_txTCMVersion, QString::asprintf("Update:%d Suc", prog));
        }
        else {
            emit updateLabel(_txTCMVersion, QString::asprintf("Update:%d Fail", prog));
        }
}

* "isSuc == true and prog == 100" means update successfully.

Important!!
a) Please DO NOT disconnect or power off IR Kit when you are updating firmware (prog != 100).
b) No matter the update is successful or not, you are required to switch off/on the whole machine to make changes valid. (Power off entire AIO and IR Kit, then power on).


3. How to use feature: store/load calibration data on hardware (available on TCM version:V1.1 201117 or above)
If IR kit on your side is V1.1 already, you can use this feature already. The calibration data is preseted. (640*480 resolution).
If you are updating to V1.1, you are required to save data at the first time, 


void TestWidget::on_btnSavePreset_clicked()
{
    QString serial = _txSerial->text();
    if (serial.length() == 0) {
        QMessageBox::information(NULL, tr("Warn"), tr("Serial empty!"));
        return;
    }
    else if (serial.length() > 12) {
        QMessageBox::information(NULL, tr("Warn"), tr("Serial too long!"));
        return;
    }

    QByteArray arr;
    arr.append(serial);
    const char *str = arr.data();
    bool isOK = UpdatePreset(EloUVCCameraConverter::getOffsetX(),
                             EloUVCCameraConverter::getOffsetY(),
                             str);

    if (isOK) {
        QMessageBox::information(NULL, tr("Warn"), tr("Save success!"));
    }
    else {
        QMessageBox::information(NULL, tr("Warn"), tr("Save failed!"));
    }
}




Then, you can get data via method

    int x, y;
    bool hasPreset = HasPreset();
    if (hasPreset) {
        x = GetPresetOffsetX();
        y = GetPresetOffsetY();
        char serial[50] = {0};
        GetPresetSerial(serial);
        emit updateEdit(_txSerial, QString::asprintf("%s", serial));

    }
    else {
        x = EloUVCCameraConverter::getOffsetX();
        y = EloUVCCameraConverter::getOffsetY();
    }
    EloUVCCameraConverter::setOffset(x, y);
    updateOffset();


4. What's limit notification?
Limit notification is a notification which indicate the motor is reached to the bottom of the IR Kit, or gives a zero-point of the angle of rotation.

You can add code like this:

    SetLimitEventListener(onLimit);


